#include "swatchdog.h"

#include <iostream>

// 示例回调函数：超时时执行
void timeout_action_1() {
    std::cout << "Watchdog 1 timed out! Executing callback 1.\n";
    exit(-1);
}

void timeout_action_2() {
    std::cout << "Watchdog 2 timed out! Executing callback 2.\n";
}

int main() {
    // 创建多个看门狗对象，并指定各自的超时限制和回调函数
    swatchdog wd1(3, timeout_action_1);  // 看门狗1，5秒超时
    swatchdog wd2(1, timeout_action_2); // 看门狗2，10秒超时

    // 启动看门狗检测线程
    wd1.start();
    wd2.start();

    // 模拟主程序循环，控制看门狗的重置
    int count = 0;
    while (true) {
        std::this_thread::sleep_for(std::chrono::seconds(1));

        // 每过3秒喂一次狗
        if (++count % 2 == 0) {
            std::cout << "Feeding the dogs...\n";
            wd1.feed();
            // wd2.feed();
        }

        // 假设某些情况下我们想停止一个看门狗
        if (count == 10) {
            std::cout << "Stopping watchdog 1...\n";
            // wd1.stop();  // 停止wd1
        }

        // 假设程序结束前停止所有看门狗
        if (count == 15) {
            std::cout << "Stopping all watchdogs...\n";
            wd1.stop();
            wd2.stop();
            break;
        }
    }

    // 等待线程结束
    wd1.join();
    wd2.join();

    return 0;
}

